#include <math.h>
#include <string.h>
+#include <cairo-gobject.h>
#include "gtkcontainer.h"
#include "gtkiconhelperprivate.h"
{
PROP_0,
PROP_PIXBUF,
+ PROP_SURFACE,
PROP_FILE,
PROP_STOCK,
PROP_ICON_SET,
GDK_TYPE_PIXBUF,
GTK_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_SURFACE,
+ g_param_spec_boxed ("surface",
+ P_("Surface"),
+ P_("A cairo_surface_t to display"),
+ CAIRO_GOBJECT_TYPE_SURFACE,
+ GTK_PARAM_READWRITE));
+
g_object_class_install_property (gobject_class,
PROP_FILE,
g_param_spec_string ("file",
gtk_image_set_from_pixbuf (image,
g_value_get_object (value));
break;
+ case PROP_SURFACE:
+ gtk_image_set_from_surface (image,
+ g_value_get_boxed (value));
+ break;
case PROP_FILE:
gtk_image_set_from_file (image, g_value_get_string (value));
break;
case PROP_PIXBUF:
g_value_set_object (value, _gtk_icon_helper_peek_pixbuf (priv->icon_helper));
break;
+ case PROP_SURFACE:
+ g_value_set_boxed (value, _gtk_icon_helper_peek_surface (priv->icon_helper));
+ break;
case PROP_FILE:
g_value_set_string (value, priv->filename);
break;
return GTK_WIDGET (image);
}
+/**
+ * gtk_image_new_from_surface:
+ * @surface: (allow-none): a #cairo_surface_t, or %NULL
+ *
+ * Creates a new #GtkImage displaying @surface.
+ * The #GtkImage does not assume a reference to the
+ * surface; you still need to unref it if you own references.
+ * #GtkImage will add its own reference rather than adopting yours.
+ *
+ * Return value: a new #GtkImage
+ **/
+GtkWidget*
+gtk_image_new_from_surface (cairo_surface_t *surface)
+{
+ GtkImage *image;
+
+ image = g_object_new (GTK_TYPE_IMAGE, NULL);
+
+ gtk_image_set_from_surface (image, surface);
+
+ return GTK_WIDGET (image);
+}
+
/**
* gtk_image_new_from_stock:
* @stock_id: a stock icon name
g_object_thaw_notify (G_OBJECT (image));
}
+/**
+ * gtk_image_set_from_surface:
+ * @image: a #GtkImage
+ * @surface: a cairo_surface_t
+ *
+ * See gtk_image_new_from_surface() for details.
+ *
+ * Since: 3.10
+ **/
+void
+gtk_image_set_from_surface (GtkImage *image,
+ cairo_surface_t *surface)
+{
+ GtkImagePrivate *priv;
+
+ g_return_if_fail (GTK_IS_IMAGE (image));
+
+ priv = image->priv;
+
+ g_object_freeze_notify (G_OBJECT (image));
+
+ if (surface)
+ cairo_surface_reference (surface);
+
+ gtk_image_clear (image);
+
+ if (surface)
+ {
+ _gtk_icon_helper_set_surface (priv->icon_helper, surface);
+ cairo_surface_destroy (surface);
+ }
+
+ g_object_notify (G_OBJECT (image), "surface");
+
+ g_object_thaw_notify (G_OBJECT (image));
+}
+
/**
* gtk_image_get_storage_type:
* @image: a #GtkImage